home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / dsp / srffttar.z / srffttar / SRFFT / fftsubs.h < prev    next >
C/C++ Source or Header  |  1991-08-26  |  2KB  |  89 lines

  1. #define mulf(x,y) (((long)(x) * (long)(y)) >> 16)
  2.  
  3. extern short x[], qf[];
  4.  
  5. #define init \
  6.     register short t1,t2,t3,t4,t5,t6,tt;\
  7.     register long lt1,lt2;
  8.  
  9. #define _fft1(i) \
  10.     x[i] >>= 1;
  11.  
  12. #define _fft2(i0,i1) \
  13.     t1 = x[i0] >> 1;\
  14.     t2 = x[i1] >> 1;\
  15.     tt = t1; tt += t2; x[i0] = tt;\
  16.     t1 -= t2; x[i1] = t1;
  17.  
  18. #define _fft3(i1,i3,i4) \
  19.     t1 = x[i1] >> 1;\
  20.     t3 = x[i3] >> 1;\
  21.     t4 = x[i4] >> 1;\
  22.     tt = t4; tt += t3; tt >>= 1;\
  23.     t4 -= t3; t4 >>= 1; x[i4] = t4;\
  24.     t3 = t1; t3 -= tt; x[i3] =  t3;\
  25.     t1 += tt; x[i1] =  t1;
  26.  
  27. #define _fft4(i1,i2,i3,i4,cc1) \
  28.     t1 = x[i1] >> 2;\
  29.     t2 = x[i2] >> 1;\
  30.     t3 = mulf (x[i3], cc1);\
  31.     t4 = mulf (x[i4], cc1);\
  32.     tt = t3; t3 -= t4; t4 += tt;\
  33.     tt = t2; tt -= t4; x[i4] =  tt;\
  34.     t2 += t4; x[i3] = -t2;\
  35.     tt = t1; tt -= t3; x[i2] =  tt;\
  36.     t1 += t3; x[i1] =  t1;
  37.  
  38. #define _fft5(i1,i2,i3,i4,i5,i6,i7,i8,sm1,sp1,cc1,sm3,sp3,cc3,ind) \
  39.     t5 = x[i7];\
  40.     t1 = mulf (t5, sm1);\
  41.     t6 = x[i3];\
  42.     if (ind)\
  43.         t6 >>= 1;\
  44.     t5 += t6;\
  45.     t2 = mulf (t6, sp1);\
  46.     t5 = mulf (t5, cc1);\
  47.     t1 += t5;\
  48.     t2 += t5;\
  49. \
  50.     t5 = x[i8];\
  51.     t3 = mulf (t5, sm3);\
  52.     t6 = x[i4];\
  53.     if (ind)\
  54.         t6 >>= 1;\
  55.     t5 += t6;\
  56.     t4 = mulf (t6, sp3);\
  57.     t5 = mulf (t5, cc3);\
  58.     t3 += t5;\
  59.     t4 += t5;\
  60. \
  61.     t5 = t3; t5 -= t1;\
  62.     t6 =  x[i2] >> 1;\
  63.     tt = t5; tt -= t6; x[i7] = tt;\
  64.              t5 += t6; x[i4] =  t5;\
  65.     t5 = t2; t5 += t4;\
  66.     t6    =  x[i6] >> 1;\
  67.     tt = t5; tt -= t6; x[i3] = tt;\
  68.              t5 += t6; x[i8] = t5;\
  69.     t5 = t1; t5 += t3;\
  70.     t6    =  x[i1] >> 1;\
  71.     tt = t6; tt -= t5; x[i6] = tt;\
  72.              t5 += t6; x[i1] = t5;\
  73.     t5 = t2; t5 -= t4;\
  74.     t6    =  x[i5] >> 1;\
  75.     tt = t6; tt -= t5; x[i5] =  tt;\
  76.              t6 += t5; x[i2] =  t6;
  77.  
  78. #define _fft7(i1,i2) \
  79.     lt1 = x[i2]; lt1 <<= 1;\
  80.     lt1 *= lt1;\
  81.     qf[i1] = lt1 >> 16;
  82.  
  83. #define _fft8(i1,i2,i3) \
  84.     lt1 = x[i2]; lt1 <<= 1;\
  85.     lt1 *= lt1;\
  86.     lt2 = x[i3]; lt2 <<= 1;\
  87.     lt2 *= lt2;\
  88.     lt1 += lt2; qf[i1] = lt1 >> 16;
  89.